import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

public class Main02 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		List<Parametros> lista = new ArrayList<Parametros>();
		/* PARAMETROS IDEALES:
		int[] tamanioPoblacion = {50,60,70,80,90,100,110,120};
		int[] cantidadIteraciones = {600,800,1000,1200,1400,1600,1800};
		double[] pbCruzamiento = {0.5,0.6,0.7,0.8,0.9};
		double[] pbMutacion = {0.1,0.2,0.3,0.4,0.5};
		int[] maxHorasConsecutivas = {5,6,7};
		int[] maxHorasXDia = {8,9};
		*/
		int[] tamanioPoblacion = {50,80,100,120};
		int[] cantidadIteraciones = {600,900,1200,1500};
		double[] pbCruzamiento = {0.6,0.7,0.8};
		double[] pbMutacion = {0.1,0.2};
		int[] maxHorasConsecutivas = {5,6,7,8,9,11};
		int[] maxHorasXDia = {8};
		//Guardamos todas las combinaciones
		//Para maxHorasXDia 
		for(int i=0; i<maxHorasXDia.length ;i++){
			//Para maxHorasConsecutivas 
			for (int j = 0; j < maxHorasConsecutivas.length; j++) {
				//Para pbMutacion
				for (int j2 = 0; j2 < pbMutacion.length; j2++) {
					//Para pbCruzamiento
					for (int k = 0; k < pbCruzamiento.length; k++) {
						//Para cantidadIteraciones
						for (int k2 = 0; k2 < cantidadIteraciones.length; k2++) {
							//Para tamanioPoblacion
							for (int l = 0; l < tamanioPoblacion.length; l++) {
								//Guardamos todas las combinaciones
								lista.add( new Parametros(tamanioPoblacion[l],
									cantidadIteraciones[k2],pbCruzamiento[k],
								    pbMutacion[j2],maxHorasConsecutivas[j],
								    maxHorasXDia[i]) );
							}
						}
					}
				}
			}
		}				
		Parametros param;
		Date fechaInicio;
		Date fechaFinal;
		fechaFinal = new Date();
		System.out.println("Dia = "+fechaFinal.getDay());
		System.out.println("Hours = "+fechaFinal.getHours());
		System.out.println("Minutes = "+fechaFinal.getMinutes());
		System.out.println("Seconds = "+fechaFinal.getSeconds());
		
		int dia;
		int hora;
		int min;
		int sec;
		System.out.println("Total = "+lista.size());
		System.out.println("maxHrDia|maxHrCns|pbMtc|pbCrz  |cntItrc |tmnPob");
		//Recorremos la lista
		for (int i = 0; i < lista.size(); i++) {
			/*fechaInicio = new Date();
			System.out.println("Dia = "+fechaInicio.getDay());
			System.out.println("Hours = "+fechaInicio.getHours());
			System.out.println("Minutes = "+fechaInicio.getMinutes());
			System.out.println("Seconds = "+fechaInicio.getSeconds());*/
			param = lista.get(i);			
			System.out.println(""+param.getMaxHorasXDia()+"       |"+
								  param.getMaxHorasConsecutivas()+"       |"+
								  param.getPbMutacion()+"  |"+
								  param.getPbCruzamiento()+"    |"+
								  param.getCantidadIteraciones()+"     |"+
								  param.getTamanioPoblacion()
								  );
			//Llamamos al algoritmo
			/*fechaFinal = new Date();
			System.out.println("Dia = "+fechaFinal.getDay());
			System.out.println("Hours = "+fechaFinal.getHours());
			System.out.println("Minutes = "+fechaFinal.getMinutes());
			System.out.println("Seconds = "+fechaFinal.getSeconds());
			//Diferencias
			dia = fechaFinal.getDay();
			if( fechaFinal.getDay() != fechaInicio.getDay() ){
				if( fechaFinal.getHours() == 0 && 
					fechaInicio.getMinutes() < fechaFinal.getMinutes() ){
					hora = 24 - fechaInicio.getHours();
				}else{
					hora = fechaFinal.getHours() - fechaInicio.getHours();
				}
			}else{
				hora = fechaFinal.getHours() - fechaInicio.getHours();
			}
			System.out.println("Dia = "+(fechaFinal.getDay()-fechaInicio.getDay()));
			System.out.println("Hours = "+fechaFinal.getHours());*/
			
		}
		int cont = 0;
		while(cont<999999999){
			cont++;
		}
		
		System.out.println("Total = "+lista.size());
		
		fechaInicio = new Date();
		System.out.println("Dia = "+fechaInicio.getDay());
		System.out.println("Hours = "+fechaInicio.getHours());
		System.out.println("Minutes = "+fechaInicio.getMinutes());
		System.out.println("Seconds = "+fechaInicio.getSeconds());
		System.out.println("fechaInicio = "+fechaInicio.getTime());
		System.out.println("fechaFinal = "+fechaFinal.getTime());
		System.out.println("Diferencia = "+(fechaInicio.getTime()-fechaFinal.getTime())/(1000));
                System.out.println("Diferencia = "+(fechaInicio.getTime()-fechaFinal.getTime())/(1000));
		
		
		
		
		
		
		
		
		
	}

}
